from jenkinsapi.jenkins import Jenkins
from jenkinsapi.build import Build
import json
import re


class JenkinsDo():
    '''
    jenkins相关操作类
    '''

    def __init__(self):
        self.jenkins_ios_url = 'http://192.168.193.56:8080/jenkins/'
        self.ios_server = Jenkins(self.jenkins_ios_url, username='jddq', password='jddq', ssl_verify=False, timeout=10)
        self.jenkins_android_url = 'http://10.181.52.123/jenkins/'
        self.android_server = Jenkins(self.jenkins_android_url, username='jddq', password='jddq', ssl_verify=False, timeout=10)
        self.job_ios = self.ios_server['Build_JDDQ2_iOS']
        self.job_android = self.android_server['Build_JDDQ_Android']

    def ios_Build(self, email, buildtype, branch):
        '''
        jenkins ios打包操作
        :param:email:接受报告邮箱
        :param:buildtype:ENTERPRISE或RELEASE
        :param:branch:git代码分支名称
        '''

        params = {
            'USERINFO': email,
            'BUILDTYPE': buildtype,
            'Branch': branch,
            'CHSName': '京东地勤',
            'ENUName': 'JDDQ',
            'SECCHECK_ID': 'p51jy',
            'BuildSign': 0
        }
        self.ios_server.build_job('Build_JDDQ2_iOS', params)

    def android_Build(self, email, buildtype, branch):
        '''
        jenkins android打包操作
        :param:email:接受报告邮箱
        :param:buildtype:DEBUG或RELEASE
        :param:branch:git代码分支名称
        '''

        params = {
            'USERINFO': email,
            'BUILDTYPE': buildtype,
            'Branch': branch,
            # 'CHSName': '京东地勤',
            'ENUName': 'JDDQ',
            'SECCHECK_ID': 'p51jy',
            'BuildSign': 0000
        }
        self.android_server.build_job('Build_JDDQ_Android', params)

    def get_ios_Build_List(self):
        '''
        jenkins ios打包结果列表
        :return: 返回{}格式结果
        '''
        buildlist = []

        # 判断 如果大于10条只取最近10条数据
        for i in range(len(self.job_ios.__dict__['_data']['builds']) if len(self.job_ios.__dict__['_data']['builds']) < 10 else 10):

            url = self.job_ios.__dict__['_data']['builds'][i]['url']
            number = self.job_ios.__dict__['_data']['builds'][i]['number']
            obj = Build(url, number, self.job_ios)

            # 如果编译成功取值
            if obj.get_status() == 'SUCCESS':
                builddata = {
                    'buildnumber': obj.buildno,   # 编译编号
                    'buildtime': obj.get_env_vars()['BUILD_TIMESTAMP'],  # 编译时间
                    'versionnumber': re.findall(r"[1-9]\.[0-9]\.[0-9]", obj.get_env_vars()['BRANCH'])[0],  # 版本号
                    'filename': obj.get_env_vars()['IPANAME'],  # 文件名
                    'gitbranch': obj.get_env_vars()['BRANCH'],  # git分支
                    'gitcommit': obj.get_revision(),  # git-commit
                    'buildtype': obj.get_env_vars()['BUILDTYPE'],  # 编译版本参数
                    'buildresult': obj.get_status(),  # 编译结果
                    'logpath': obj.get_env_vars()['RUN_DISPLAY_URL'],  # 编译log地址
                    # 'log': obj.get_console().encode('utf-8'),  # 编译log
                    'pngurl': obj.get_env_vars()['PNG'],  # 下载地址 编译成功才有
                    'downloadpath': obj.get_env_vars()['URL'],  # 二维码 编译成功才有
                }
            else:
                builddata = {
                    'buildnumber': obj.buildno,   # 编译编号
                    'buildtime': obj.get_env_vars()['BUILD_TIMESTAMP'],  # 编译时间
                    'versionnumber': re.findall(r"[1-9]\.[0-9]\.[0-9]", obj.get_env_vars()['BRANCH'])[0],  # 版本号
                    'filename': '',  # 文件名
                    'gitbranch': obj.get_env_vars()['BRANCH'],  # git分支
                    'gitcommit': obj.get_revision(),  # git-commit
                    'buildtype': obj.get_env_vars()['BUILDTYPE'],  # 编译版本参数
                    'buildresult': obj.get_status(),  # 编译结果
                    'logpath': obj.get_env_vars()['RUN_DISPLAY_URL'],  # 编译log地址
                    # 'log': obj.get_console().encode('utf-8'),  # 编译log
                    'pngurl': 'http://p1.img.cctvpic.com/20120108/images/1326013219182_1326013219182_r.jpg',  # 默认二维码图片
                    'downloadpath': '',  # 二维码 编译成功才有
                }
            buildlist.append(builddata)
            listrsp = {
                'buildlist': buildlist
            }
        return listrsp

    def get_Android_Build_List(self):
        '''
        jenkins android打包结果列表
        :return: 返回{}格式结果
        '''
        buildlist = []

        # 判断 如果大于10条只取最近10条数据
        for i in range(len(self.job_android.__dict__['_data']['builds']) if len(self.job_android.__dict__['_data']['builds']) < 10 else 10):

            url = self.job_android.__dict__['_data']['builds'][i]['url']
            number = self.job_android.__dict__['_data']['builds'][i]['number']
            obj = Build(url, number, self.job_android)

            # 如果编译成功取值
            if obj.get_status() == 'SUCCESS':
                builddata = {
                    'buildnumber': obj.buildno,   # 编译编号
                    'buildtime': obj.get_env_vars()['BUILD_TIMESTAMP'],  # 编译时间
                    'versionnumber': re.findall(r"[1-9]\.[0-9]\.[0-9]", obj.get_env_vars()['BRANCH'])[0],  # 版本号
                    'filename': obj.get_env_vars()['APKNAME'],  # 文件名
                    'gitbranch': obj.get_env_vars()['BRANCH'],  # git分支
                    'gitcommit': obj.get_revision(),  # git-commit
                    'buildtype': obj.get_env_vars()['BUILDTYPE'],  # 编译版本参数
                    'buildresult': obj.get_status(),  # 编译结果
                    'logpath': obj.get_env_vars()['RUN_DISPLAY_URL'],  # 编译log地址
                    # 'log': obj.get_console().encode('utf-8'),  # 编译log
                    'pngurl': obj.get_env_vars()['PNG'],  # 下载地址 编译成功才有
                    'downloadpath': obj.get_env_vars()['URL'],  # 二维码 编译成功才有
                }
            else:
                builddata = {
                    'buildnumber': obj.buildno,   # 编译编号
                    'buildtime': obj.get_env_vars()['BUILD_TIMESTAMP'],  # 编译时间
                    'versionnumber': re.findall(r"[1-9]\.[0-9]\.[0-9]", obj.get_env_vars()['BRANCH'])[0],  # 版本号
                    'filename': '',  # 文件名
                    'gitbranch': obj.get_env_vars()['APKNAME'],  # git分支
                    'gitcommit': obj.get_revision(),  # git-commit
                    'buildtype': obj.get_env_vars()['BUILDTYPE'],  # 编译版本参数
                    'buildresult': obj.get_status(),  # 编译结果
                    'logpath': obj.get_env_vars()['RUN_DISPLAY_URL'],  # 编译log地址
                    # 'log': obj.get_console().encode('utf-8'),  # 编译log
                    'pngurl': 'http://p1.img.cctvpic.com/20120108/images/1326013219182_1326013219182_r.jpg',  # 默认二维码图片
                    'downloadpath': '',  # 二维码 编译成功才有
                }
            buildlist.append(builddata)
            listrsp = {
                'buildlist': buildlist
            }
        return listrsp


if __name__ == '__main__':
    # ss = JenkinsDo().get_ios_Build_List()
    ss = JenkinsDo().get_Android_Build_List()
    print(ss)

    # JenkinsDo().ios_Build(email='liuyongzhi@jd.com', buildtype='ENTERPRISE', branch='DEV_3.0.0')
    # JenkinsDo().android_Build(email='liuyongzhi@jd.com', buildtype='DEBUG', branch='2.7.5')
    # url = ss.job_ios.__dict__['_data']['lastBuild']['url']
    # number = ss.job_ios.__dict__['_data']['lastBuild']['number']
    # data = ss.job_ios.__dict__['_data']
    # obj = Build(url, number, ss.job_ios)
    # bj = api.block_until_complete(url, number, ss.job_ios)
    # ss.ios_Build()
    # print(obj.is_running())
    # print(obj.stop())
    # print(obj.is_good())
    # print(obj.get_number())
    # print(obj.buildno)
    